package model

import (
	"time"

	"gorm.io/gorm"
)

// Organization 组织（部门）模型
type Organization struct {
	ID        uint           `gorm:"primaryKey" json:"id"`
	ParentID  uint           `gorm:"type:int;default:0;comment:父级组织ID" json:"parentId"`
	OrgName   string         `gorm:"type:varchar(100);not null;comment:组织名称" json:"orgName"`
	OrgCode   string         `gorm:"type:varchar(50);uniqueIndex;comment:组织编码" json:"orgCode"`
	OrgType   int8           `gorm:"type:tinyint;not null;default:2;comment:组织类型 1-公司 2-部门 3-小组" json:"orgType"`
	OrgLevel  int            `gorm:"type:int;not null;default:1;comment:组织层级" json:"orgLevel"`
	ManagerID uint           `gorm:"type:int;comment:负责人ID" json:"managerId"`
	Contact   string         `gorm:"type:varchar(50);comment:联系人" json:"contact"`
	Phone     string         `gorm:"type:varchar(20);comment:联系电话" json:"phone"`
	Email     string         `gorm:"type:varchar(100);comment:邮箱" json:"email"`
	Address   string         `gorm:"type:varchar(200);comment:地址" json:"address"`
	OrderNum  int            `gorm:"type:int;default:0;comment:排序号" json:"orderNum"`
	Status    int8           `gorm:"type:tinyint;default:1;comment:状态 0-禁用 1-启用" json:"status"`
	Remark    string         `gorm:"type:varchar(500);comment:备注" json:"remark"`
	CreatedAt time.Time      `json:"createdAt"`
	UpdatedAt time.Time      `json:"updatedAt"`
	DeletedAt gorm.DeletedAt `gorm:"index" json:"-"`

	// 关联
	Manager  *User           `gorm:"foreignKey:ManagerID" json:"manager,omitempty"`
	Children []*Organization `gorm:"-" json:"children,omitempty"`
}

// TableName 指定表名
func (Organization) TableName() string {
	return "sys_organization"
}

// RoleDataPermission 角色数据权限表
type RoleDataPermission struct {
	RoleID    uint      `gorm:"primaryKey;autoIncrement:false" json:"roleId"`
	DataScope int8      `gorm:"type:tinyint;not null;default:1;comment:数据权限范围 1-全部数据 2-本部门数据 3-本部门及以下数据 4-仅自己数据 5-自定义数据" json:"dataScope"`
	OrgIDs    string    `gorm:"type:text;comment:自定义组织ID列表，逗号分隔" json:"orgIds"`
	CreatedAt time.Time `gorm:"autoCreateTime" json:"createdAt"`
	UpdatedAt time.Time `gorm:"autoUpdateTime" json:"updatedAt"`
}

// TableName 指定表名
func (RoleDataPermission) TableName() string {
	return "sys_role_data_permission"
}
